﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Ecommerce.Model
{
    public class PessoaModel : BaseData
    {
        private static PessoaModel instance;

        private PessoaModel()
        {

        }

        public static PessoaModel Instance
        {
            get
            {
                if (instance == null)
                    instance = new PessoaModel();
                
                return instance;
            }
        }

        public tb_pes_pessoa Obter(int identificadorPessoa)
        {
            using (EcommerceEntities db = new EcommerceEntities(this.InicializarStringConexao(), false))
                return db.tb_pes_pessoa.Include("tb_pju_pessoa_juridica").Include("tb_pfi_pessoa_fisica").Where(x => x.pes_idt_pessoa.Equals(identificadorPessoa)).FirstOrDefault();
        }

        public List<tb_pes_pessoa> Listar()
        {
            using (EcommerceEntities db = new EcommerceEntities(this.InicializarStringConexao(), false))
                return db.tb_pes_pessoa.Include("tb_pju_pessoa_juridica").Include("tb_pfi_pessoa_fisica").ToList();
        }

        public tb_pes_pessoa Login(string login, string senha)
        {
            tb_pes_pessoa pessoa = default(tb_pes_pessoa);
            using (var db = new EcommerceEntities(this.InicializarStringConexao(), false))
            {
                pessoa = db.tb_pes_pessoa.Include("tb_pju_pessoa_juridica").Include("tb_pfi_pessoa_fisica").Where(x => x.pes_des_login.Equals(login.Trim()) && x.pes_des_senha.Equals(senha.Trim()) && x.pes_flg_ativo == true).FirstOrDefault();
                if (pessoa != null && !pessoa.pes_flg_pessoa_fisica)
                    pessoa = RevendaModel.Instance.Obter(pessoa.pes_idt_pessoa);
            }
            return pessoa;
        }

        public bool LoginCadastrado(string login)
        {
            tb_pes_pessoa pessoa;
            using (var db = new EcommerceEntities(this.InicializarStringConexao(), false))
            {
                pessoa = db.tb_pes_pessoa.Where(x => x.pes_des_login.Equals(login)).FirstOrDefault();
            }
            return pessoa != null;
        }

        public List<tb_tte_tipo_telefone> ListarTipoTelefone()
        {
            using (var db = new EcommerceEntities(this.InicializarStringConexao(), false))
                return db.tb_tte_tipo_telefone.ToList();
        }


        public tb_pes_pessoa ObterPessoaPorLogin(string login)
        {
            tb_pes_pessoa pessoa = default(tb_pes_pessoa);
            using (var db = new EcommerceEntities(this.InicializarStringConexao(), false))
            {
                pessoa = db.tb_pes_pessoa.Where(x => x.pes_des_login.Equals(login)).FirstOrDefault();
            }
            return pessoa;
        }

        public void InserirAlteracaoSenha(tb_pes_pessoa pessoa, string guid)
        {
            using (EcommerceEntities db = new EcommerceEntities(this.InicializarStringConexao(), false))
            {
                tb_tse_troca_senha tse = new tb_tse_troca_senha();
                tse.tb_pes_pessoa = pessoa;
                tse.tse_cod_identificador = guid;
                tse.tse_flg_ativo = true;
                tse.pes_idt_pessoa = pessoa.pes_idt_pessoa;
                tse.tse_dat_solicitacao = DateTime.Now;

                db.tb_tse_troca_senha.Add(tse);
                db.SaveChanges();
            }
        }

    }
}
